#include "ObjetoVivo.h"

int ObjetoVivo::ID_CLASE = 0 ;

ObjetoVivo::ObjetoVivo(Punto* unPunto, unsigned int unRadio, bool vivo){
  
	this->punto = unPunto;
	this->puntoAnterior = new Punto(unPunto);
    this->radio = unRadio;
    this->isAlive = vivo;
	ObjetoVivo::ID_CLASE++ ;
	this->id = ObjetoVivo::ID_CLASE;
}

bool ObjetoVivo::estaVivo(){
    return this->isAlive;
}

bool  ObjetoVivo::equals(ObjetoVivo *otroObjetoVivo){
	return ( this->getId() == otroObjetoVivo->getId() ) ;

}

int ObjetoVivo::getId(){
	return this->id;
}

bool ObjetoVivo::colisioneCon(ObjetoVivo* otroObjetoVivo){
    float separacionEntreObjetos = this->getPosicion()->distanciaCon(otroObjetoVivo->getPosicion());
    return (separacionEntreObjetos <= (otroObjetoVivo->getRadio() + this->radio));
}

Punto* ObjetoVivo::getPosicion(){
	return this->punto;
}

Punto* ObjetoVivo::getPosicionAnterior(){
	return this->puntoAnterior;
}

unsigned int ObjetoVivo::getRadio(){
	return this->radio;
}

void ObjetoVivo::setPosicion(Punto* unPunto){
	if(this->puntoAnterior){
		delete this->puntoAnterior;
	}
	this->puntoAnterior = this->punto ;
    this->punto = unPunto;
}

void ObjetoVivo::setPosicion(Punto* unPunto, bool pisarAnterior){
	
	this->setPosicion(unPunto);
	if(pisarAnterior){
		delete this->puntoAnterior ;
		this->puntoAnterior = new Punto(unPunto);
	}
}

void ObjetoVivo::setRadio(unsigned int unRadio){
	this->radio = unRadio;
}

void ObjetoVivo::matar(){
    this->isAlive = false;
}

void ObjetoVivo::revivir(){
    this->isAlive = true;
}

ObjetoVivo::~ObjetoVivo(){
	delete this->punto;
	delete this->puntoAnterior;
}